/*
 *  Servlet para Acesso Publico
 */
package Servlets;

import AcessoBD.DAOException;
import Modelos.BeanPublicacao;
import Modelos.BeanMembro;
import AcessoBD.PublicoApeteDAO;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class AcessoPublico extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession sessao = request.getSession(true);

        String pub = request.getParameter("pub");
        String membroId = request.getParameter("membro");

        // ACESSO A PUBLICACAO //
        if (pub != null) {
            PublicoApeteDAO publico = new PublicoApeteDAO();
            try {
                BeanPublicacao publicacao = publico.lerPublicacao(pub);
                sessao.setAttribute("publicacao", publicacao);
            } catch (DAOException ex) {
                ex.printStackTrace();
            }
        }

        // ACESSO A INFORMAÇÕES DE MEMBRO //
        if (membroId != null) {
            PublicoApeteDAO publico = new PublicoApeteDAO();
            try {
                BeanMembro membro = publico.infoMembro(membroId);
                sessao.setAttribute("membro", membro);
            } catch (DAOException ex) {
                ex.printStackTrace();
            }
        }

        // PRIMEIRO ACESSO //
        if (sessao.getAttribute("listaGeral") == null) {
            PublicoApeteDAO publico = new PublicoApeteDAO();
            try {
                List<BeanPublicacao> listaGeral = publico.listaGeral();
                List<BeanPublicacao> listaArtigo = publico.listaArtigo();
                List<BeanPublicacao> listaEvento = publico.listaEvento();
                List<BeanPublicacao> listaBiblioteca = publico.listaBiblioteca();

                sessao.setAttribute("listaGeral", listaGeral);
                sessao.setAttribute("listaArtigo", listaArtigo);
                sessao.setAttribute("listaEvento", listaEvento);
                sessao.setAttribute("listaBiblioteca", listaBiblioteca);
            } catch (DAOException ex) {
                ex.printStackTrace();
            }
        }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String acao = request.getParameter("acao");

        if (acao.contentEquals("LoginMembro")) {
            logarMembro(request, response);
        } else if (acao.contentEquals("LembrarMembro")) {
            lembrarMembro(request, response);
        } else if (acao.contentEquals("Assinar")) {
            assinarNewsletter(request, response);
        } else if (acao.contentEquals("CancelarAssinatura")) {
            cancelarNewsletter(request, response);
        } else if (acao.contentEquals("LogoutMembro")) {
            logoutMembro(request, response);
        } else if (acao.contentEquals("CodigoSeguranca")) {
            codigoSeguranca(request, response);
        } else if (acao.contentEquals("InscreverEmEvento")) {
            inscreverEmEvento(request, response);
        }

    }

    protected void logarMembro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession sessao = request.getSession(true);
        BeanMembro membro = null;

        String login = request.getParameter("login");
        String senha = request.getParameter("senha");

        PublicoApeteDAO publico = new PublicoApeteDAO();
        try {
            membro = publico.logarMembro(login, senha);
        } catch (DAOException ex) {
            ex.printStackTrace();
        }

        if (membro != null) {
            sessao.removeAttribute("erroLogin");
            sessao.setAttribute("membroAutenticado", membro);
            RequestDispatcher rd = request.getRequestDispatcher("/membro.jsp");
            rd.forward(request, response);
        } else {
            sessao.setAttribute("erroLogin", 1);
            RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
            rd.forward(request, response);
        }
    }

    protected void logoutMembro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession sessao = request.getSession(false);
        sessao.invalidate();

        response.sendRedirect("home.jsp");
    }

    protected void lembrarMembro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession sessao = request.getSession(true);

        String email = request.getParameter("email");
        String cpf = request.getParameter("cpf");
        boolean erro = true;

        PublicoApeteDAO publico = new PublicoApeteDAO();
        try {
            erro = publico.lembrarMembro(email, cpf);
        } catch (DAOException ex) {
            ex.printStackTrace();
        }

        if (!erro) {
            sessao.removeAttribute("erroLembrar");
            sessao.setAttribute("lembrarSucesso", 1);
        } else {
            sessao.setAttribute("erroLembrar", 1);
        }
        RequestDispatcher rd = request.getRequestDispatcher("/lembrar-me.jsp");
        rd.forward(request, response);
    }
    
    protected void assinarNewsletter(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession sessao = request.getSession(true);

        String nome = request.getParameter("nome");
        String email = request.getParameter("email");
        
        boolean erro = true;

        PublicoApeteDAO publico = new PublicoApeteDAO();
        try {
            erro = publico.assinarNewsletter(nome, email);
        } catch (DAOException ex) {
            ex.printStackTrace();
        }

        if (!erro) {
            sessao.removeAttribute("erroAssinar");
            sessao.setAttribute("assinarSucesso", 1);
        } else {
            sessao.setAttribute("erroAssinar", 1);
        }
        RequestDispatcher rd = request.getRequestDispatcher("/assinar.jsp");
        rd.forward(request, response);
    }
    
    protected void cancelarNewsletter(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession sessao = request.getSession(true);

        String email = request.getParameter("email");
        String codigo = request.getParameter("codigo");
        
        boolean erro = true;

        PublicoApeteDAO publico = new PublicoApeteDAO();
        try {
            erro = publico.cancelarNewsletter(email, codigo);
        } catch (DAOException ex) {
            ex.printStackTrace();
        }

        if (!erro) {
            sessao.removeAttribute("erroCancelar");
            sessao.setAttribute("cancelarSucesso", 1);
        } else {
            sessao.setAttribute("erroCancelar", 1);
        }
        RequestDispatcher rd = request.getRequestDispatcher("/cancelar_assinatura.jsp");
        rd.forward(request, response);
    }
    protected void codigoSeguranca(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession sessao = request.getSession(true);

        String email = request.getParameter("email");
        
        boolean erro = true;

        PublicoApeteDAO publico = new PublicoApeteDAO();
        try {
            erro = publico.codigoSeguranca(email);
        } catch (DAOException ex) {
            ex.printStackTrace();
        }

        if (!erro) {
            sessao.removeAttribute("erroCodigo");
            sessao.setAttribute("codigoSucesso", 1);
        } else {
            sessao.setAttribute("erroCodigo", 1);
        }
        RequestDispatcher rd = request.getRequestDispatcher("/codigo_seguranca.jsp");
        rd.forward(request, response);
    }
    
    protected void inscreverEmEvento(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
    }
}